Building Tor with MSVC.
=======================

NOTE: This is not the preferred method for building Tor on windows: we use
mingw for our packages.

Last updated 9 September 2014.


Requirements:
-------------

 * Visual Studio 2010
    https://go.microsoft.com/fwlink/?LinkId=323467
 * CMake 2.8.12.2
    https://www.cmake.org/download/
 * Perl 5.16
    https://www.activestate.com/activeperl/downloads
 * Latest stable OpenSSL tarball
    https://www.openssl.org/source/
 * Latest stable zlib tarball
    https://zlib.net/
 * Latest stable libevent Libevent tarball
    https://github.com/libevent/libevent/releases

Make sure you check signatures for all these packages.

Steps:
------

Building OpenSSL from source as a shared library:

 cd <openssl source dir>
 perl Configure VC-WIN32
 perl util\mkfiles.pl >MINFO
 perl util\mk1mf.pl no-asm dll VC-WIN32 >32dll.mak
 perl util\mkdef.pl 32 libeay > ms\libeay32.def
 perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
 nmake -f 32dll.mak

Making OpenSSL final package:

 Create <openssl final package dir>, I'd recommend using a name like <openssl
 source dir>-vc10.

 Copy the following directories and files to their respective locations
  <openssl source dir>\inc32\openssl => <openssl final package dir>\include\openssl
  <openssl source dir>\out32dll\libeay32.lib => <openssl final package dir>\lib\libeay32.lib
  <openssl source dir>\out32dll\ssleay32.lib => <openssl final package dir>\lib\ssleay32.lib
  <openssl source dir>\out32dll\libeay32.dll => <openssl final package dir>\bin\libeay32.dll
  <openssl source dir>\out32dll\openssl.exe => <openssl final package dir>\bin\openssl.exe
  <openssl source dir>\out32dll\ssleay32.dll => <openssl final package dir>\bin\ssleay32.dll

Building Zlib from source:

 cd <zlib source dir>
 nmake -f win32/Makefile.msc

Building libevent:

 cd <libevent source dir>
 mkdir build && cd build
 SET OPENSSL_ROOT_DIR=<openssl final package dir>
 cmake -G "NMake Makefiles" .. -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING="/MT /Zi /O2 /Ob1 /D NDEBUG" -DZLIB_LIBRARY:FILEPATH="<zlib source dir>\zdll.lib" -DZLIB_INCLUDE_DIR:PATH="<zlib source dir>"
 nmake event

Building Tor:

 Create a dir above tor source dir named build-alpha and two subdirs include
 and lib.

 Your build tree should now be similar to this one:
  * build-alpha
    - include
    - lib
  * <libevent source dir>
    - build
    - cmake
    - ...
  * <openssl source dir>
    - ...
    - ms
    - util
    - ...
  * <openssl final package dir>
    - bin
    - include
    - lib
  * <tor source dir>
    - ...
    - src
    - ...
  * <zlib source dir>
    - ...
    - win32
    - ...

 Copy the following dirs and files to the following locations:
  <openssl final package dir>\include\openssl => build-alpha\include\openssl
  <libevent source dir>\include => build-alpha\include
  <libevent source dir>\WIN32-Code\nmake\event2 => build-alpha\include\event2
  <zlib source dir>\z*.h => build-alpha\include\z*.h

 Now copy the following files to the following locations and rename them
 according new names:

  <libevent source dir>\build\lib\event.lib => build-alpha\lib\libevent.lib
  <openssl final package dir>\lib\libeay32.lib => build-alpha\lib\libcrypto.lib
  <openssl final package dir>\lib\ssleay32.lib => build-alpha\lib\libssl.lib
  <zlib source dir>\zdll.lib => build-alpha\lib\libz.lib

 And we are now ready for the build process:

  cd <tor source dir>
  nmake -f Makefile.nmake

 After the above process is completed there should be a tor.exe in <tor
 source dir>\src\or

 Copy tor.exe to desired location and also copy zlib1.dll, libeay32.dll and
 ssleay32.dll from built zlib and openssl packages

